using lucere.io;

namespace lucere.index
{
    /// <summary>
    /// Utility class for executing code that needs to do
    /// something with the current segments file.  This is
    /// necessary with lock-less commits because from the time
    /// you locate the current segments file name, until you
    /// actually open it, read its contents, or check modified
    /// time, etc., it could have been deleted due to a writer
    /// commit finishing.
    /// </summary>
    public interface IFindSegmentsFile 
    {
        IDirectory Directory { get; }
        object Run();
        object Run(IIndexCommit commit);

        /// <summary>
        /// Subclass must implement this.  
        /// The assumption is an IOException will be thrown if something goes wrong 
        /// during the processing that could have been caused by
        /// a writer committing.
        /// </summary>
        /// <param name="segmentFileName"></param>
        /// <returns></returns>
        object DoBody(string segmentFileName);
    }
}